/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package operaciones;

import controller.EmpresaJpaController;
import controller.EventosJpaController;
import controller.FotosJpaController;
import controller.ProductosJpaController;
import controller.ServiciosJpaController;
import controller.exceptions.IllegalOrphanException;
import controller.exceptions.NonexistentEntityException;
import controller.exceptions.PreexistingEntityException;
import correo.Correo;
import dto.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.primefaces.event.RowEditEvent;
import org.primefaces.model.UploadedFile;

/**
 *
 * @author chokurey
 */
@ManagedBean(name="OperacionesEmpresa")

public class OperacionesEmpresa  implements Serializable{
    
   
    UIComponent componente;
    Object valor;
    private  Empresa empresa,empresaeditar,empresaeliminar, empresalogoedit;
    EmpresaJpaController empresajpa;
    Mensajes msg;
    private List <Empresa> listadoempresas;
    private List <Fotos> listadofotos;
    boolean nitrepetido=false;
    Correo correo;
    //nit a eliminar enviado como parametro del identificador de fila del datatable
    private String niteliminar; 
    //ruta local windows
    //private String destination="C:\\Users\\chokurey\\Documents\\NetBeansProjects\\portal web\\web\\upload\\",urllogo;
    
    //ruta local linux /home/chokurey/NetBeansProjects/portal web/web/upload
    private String destination="/home/chokurey/NetBeansProjects/portal web/web/upload/",urllogo;
    
    //ruta en el servidor ubuntu
    // private String destination="/home/chokurey/NetBeansProjects/portal_web/web/upload/",urllogo;
    
    //campos recibidos del identificador de fila del datagrid para mostrarlos en los campos de edicion
    //y asi poder realizar la actualizacion de la configuracion del servicio basico de la empresa
    private String niteditar,nombreeditar,estadousuarioeditar,plan;
    private int canteventos,cantpromociones,cantclasificados,cantproductos,cantservicios;
    private Date fechainicioservicio,fechafinservicio;
    private UploadedFile file;
    Map sessionm;
    
    private FotosJpaController fotojpa;
    private Fotos foto;
    private int fotoadicionalelimplancomplementario,fotoadicionaleditplancomplementario;

    
    //ATRIBUTOS PARA PRODUCTOS
    private Productos producto,productoeditelim;
    private ProductosJpaController productosjpa;
    private List <Productos> listadoproductos;
    private int idproductoelim;
    private int idproductoedit;
    private String nombreeditprod;
    private String desceditprod;
    private String valoreditprod;
    
    
    
    //ATRIBUTOS PARA SERVICIOS EMPRESA
    private Servicios servicio;
    private Servicios servicioelim;
    private ServiciosJpaController serviciosjpa;
    private List <Servicios> listadoservicios;
    private int idservicioeditelimempresa;
    private String nombreservicioeditelim;
    private String descservicioeditelim;
    private int idservicioeliminar;

    //ATRIBUTOS PARA EVENTOS
    private List<Eventos> listadoeventos;
    private EventosJpaController eventosjpa;
    private Eventos evento;
    private int ideventoeliminar;
    private int ideventoedit;
    private String nombreeventoedit;
    private String desceventoedit;
    private String lugarediteventoedit;
    private Date fechainicioeventoedit,fechafineventoedit;
    private String emailcontactoeventoedit;

    public String getLugarediteventoedit() {
        return lugarediteventoedit;
    }

    public void setLugarediteventoedit(String lugarediteventoedit) {
        this.lugarediteventoedit = lugarediteventoedit;
    }

    public Date getFechainicioeventoedit() {
        return fechainicioeventoedit;
    }

    public void setFechainicioeventoedit(Date fechainicioeventoedit) {
        this.fechainicioeventoedit = fechainicioeventoedit;
    }

    public Date getFechafineventoedit() {
        return fechafineventoedit;
    }

    public void setFechafineventoedit(Date fechafineventoedit) {
        this.fechafineventoedit = fechafineventoedit;
    }

   
    
    
    public String getEmailcontactoeventoedit() {
        return emailcontactoeventoedit;
    }

    public void setEmailcontactoeventoedit(String emailcontactoeventoedit) {
        this.emailcontactoeventoedit = emailcontactoeventoedit;
    }

    
    public Eventos getEvento() {
        return evento;
    }

    public void setEvento(Eventos evento) {
        this.evento = evento;
    }
    

    
    
    public String getNombreeventoedit() {
        return nombreeventoedit;
    }

    public void setNombreeventoedit(String nombreeventoedit) {
        this.nombreeventoedit = nombreeventoedit;
    }

    
    
    public String getDesceventoedit() {
        return desceventoedit;
    }

    public void setDesceventoedit(String desceventoedit) {
        this.desceventoedit = desceventoedit;
    }
    
    

    public int getIdeventoedit() {
        return ideventoedit;
    }

    public void setIdeventoedit(int ideventoedit) {
        this.ideventoedit = ideventoedit;
    }
    
    

    public int getIdeventoeliminar() {
        return ideventoeliminar;
    }

    public void setIdeventoeliminar(int ideventoeliminar) {
        this.ideventoeliminar = ideventoeliminar;
    }
    
    

    public EventosJpaController getEventosjpa() {
        
        return eventosjpa;
    }

    public void setEventosjpa(EventosJpaController eventosjpa) {
        this.eventosjpa = eventosjpa;
    }
    
    

    public List<Eventos> getListadoeventos() {
       eventosjpa= new EventosJpaController();
       listadoeventos=eventosjpa.findEventosEntities();
        return listadoeventos;
    }

    public void setListadoeventos(List<Eventos> listadoeventos) {
        this.listadoeventos = listadoeventos;
    }
    
    
    
    public String getDesceditprod() {
        return desceditprod;
    }

    public void setDesceditprod(String desceditprod) {
        this.desceditprod = desceditprod;
    }

    public String getNombreeditprod() {
        return nombreeditprod;
    }

    public void setNombreeditprod(String nombreeditprod) {
        this.nombreeditprod = nombreeditprod;
    }

    public String getValoreditprod() {
        return valoreditprod;
    }

    public void setValoreditprod(String valoreditprod) {
        this.valoreditprod = valoreditprod;
    }

    
    public int getIdproductoedit() {
        return idproductoedit;
    }

    public void setIdproductoedit(int idproductoedit) {
        this.idproductoedit = idproductoedit;
    }

    
    public int getIdproductoelim() {
        return idproductoelim;
    }

    public void setIdproductoelim(int idproductoelim) {
        this.idproductoelim = idproductoelim;
    }

    
    
    
    public int getIdservicioeliminar() {
        return idservicioeliminar;
    }

    public void setIdservicioeliminar(int idservicioeliminar) {
        this.idservicioeliminar = idservicioeliminar;
    }
    
    
    public String getDescservicioeditelim() {
        return descservicioeditelim;
    }

    public void setDescservicioeditelim(String descservicioeditelim) {
        this.descservicioeditelim = descservicioeditelim;
    }

    public String getNombreservicioeditelim() {
        return nombreservicioeditelim;
    }

    public void setNombreservicioeditelim(String nombreservicioeditelim) {
        this.nombreservicioeditelim = nombreservicioeditelim;
    }
    
    

    public int getIdservicioeditelimempresa() {
        return idservicioeditelimempresa;
    }

    public void setIdservicioeditelimempresa(int idservicioeditelimempresa) {
        this.idservicioeditelimempresa = idservicioeditelimempresa;
    }
    

   

   
    
    

    public Servicios getServicio() {
        return servicio;
    }

    public void setServicio(Servicios servicio) {
        this.servicio = servicio;
    }

    public Servicios getServicioelim() {
        return servicioelim;
    }

    public void setServicioelim(Servicios servicioelim) {
        this.servicioelim = servicioelim;
    }

    public ServiciosJpaController getServiciosjpa() {
        return serviciosjpa;
    }

    public void setServiciosjpa(ServiciosJpaController serviciosjpa) {
        this.serviciosjpa = serviciosjpa;
    }

     public List<Servicios> getListadoservicios() {
        serviciosjpa=new ServiciosJpaController();
        listadoservicios=serviciosjpa.findServiciosEntities();
        return listadoservicios;
    }

    public void setListadoservicios(List<Servicios> listadoservicios) {
        this.listadoservicios = listadoservicios;
    }
    
    
    
    

    public List<Productos> getListadoproductos() {
         productosjpa= new ProductosJpaController();
        listadoproductos=productosjpa.findProductosEntities();
        return listadoproductos;
    }

    public void setListadoproductos(List<Productos> listadoproductos) {
        
       
        this.listadoproductos = listadoproductos;
    }
  
    public Productos getProducto() {
        return producto;
    }

    public void setProducto(Productos producto) {
        this.producto = producto;
    }

    public Productos getProductoeditelim() {
        return productoeditelim;
    }

    public void setProductoeditelim(Productos productoeditelim) {
        this.productoeditelim = productoeditelim;
    }

    public ProductosJpaController getProductosjpa() {
        return productosjpa;
    }

    public void setProductosjpa(ProductosJpaController productosjpa) {
        this.productosjpa = productosjpa;
    }
   
    
    
    
    public int getFotoadicionaleditplancomplementario() {
        return fotoadicionaleditplancomplementario;
    }

    public void setFotoadicionaleditplancomplementario(int fotoadicionaleditplancomplementario) {
        this.fotoadicionaleditplancomplementario = fotoadicionaleditplancomplementario;
    }
    

    
    public Fotos getFoto() {
        return foto;
    }

    public void setFoto(Fotos foto) {
        this.foto = foto;
    }
  
    
    
    public int getFotoadicionalelimplancomplementario() {
        return fotoadicionalelimplancomplementario;
    }

    public void setFotoadicionalelimplancomplementario(int fotoadicionalelimplancomplementario) {
        this.fotoadicionalelimplancomplementario = fotoadicionalelimplancomplementario;
    }

    public FotosJpaController getFotojpa() {
        return fotojpa;
    }

    public void setFotojpa(FotosJpaController fotojpa) {
        this.fotojpa = fotojpa;
    }

    
    
    public List<Fotos> getListadofotos() {
        listadofotos=obtenerlistarfotosadicionalesempresaplancomplementario();
        return listadofotos;
    }

    public void setListadofotos(List<Fotos> listadofotos) {
        this.listadofotos = listadofotos;
    }

   
    
    public Empresa getEmpresalogoedit() {
        return empresalogoedit;
    }

    public void setEmpresalogoedit(Empresa empresalogoedit) {
        this.empresalogoedit = empresalogoedit;
    }

    
    
    
    public String getUrllogo() {
        return urllogo;
    }

    public void setUrllogo(String urllogo) {
        this.urllogo = urllogo;
    }

    
     public UploadedFile getFile() {
        return file;
    }

    public void setFile(UploadedFile file) {
        this.file = file;
    }
   
 
    
    public String getDestination() {
        return destination;
    }

    public void setDestination(String destination) {
        this.destination = destination;
    }

    
   
    public Date getFechafinservicio() {
        return fechafinservicio;
    }

    public void setFechafinservicio(Date fechafinservicio) {
        this.fechafinservicio = fechafinservicio;
    }

    public Date getFechainicioservicio() {
        return fechainicioservicio;
    }

    public void setFechainicioservicio(Date fechainicioservicio) {
        this.fechainicioservicio = fechainicioservicio;
    }
    
 
    public String getPlan() {
        return plan;
    }

    public void setPlan(String plan) {
        this.plan = plan;
    }

    
    public int getCantservicios() {
        return cantservicios;
    }

    public void setCantservicios(int cantservicios) {
        this.cantservicios = cantservicios;
    }

    public int getCantproductos() {
        return cantproductos;
    }

    public void setCantproductos(int cantproductos) {
        this.cantproductos = cantproductos;
    }

    
    public int getCantclasificados() {
        return cantclasificados;
    }

    public void setCantclasificados(int cantclasificados) {
        this.cantclasificados = cantclasificados;
    }

    
    public int getCantpromociones() {
        return cantpromociones;
    }

    public void setCantpromociones(int cantpromociones) {
        this.cantpromociones = cantpromociones;
    }

    
    
    public int getCanteventos() {
        return canteventos;
    }

    public void setCanteventos(int canteventos) {
        this.canteventos = canteventos;
    }
    
    public String getEstadousuarioeditar() {
        return estadousuarioeditar;
    }

    public void setEstadousuarioeditar(String estadousuarioeditar) {
        this.estadousuarioeditar = estadousuarioeditar;
    }
    
    
    
    public String getNombreeditar() {
        return nombreeditar;
    }

    public void setNombreeditar(String nombreeditar) {
        this.nombreeditar = nombreeditar;
    }

    
    
    public String getNiteditar() {
        return niteditar;
    }

    public void setNiteditar(String niteditar) {
        this.niteditar = niteditar;
    }
    
    
    public Empresa getEmpresaeliminar() {
        return empresaeliminar;
    }

    public void setEmpresaeliminar(Empresa empresaeliminar) {
        this.empresaeliminar = empresaeliminar;
    }

    
    public String getNiteliminar() {
        return niteliminar;
    }

    public void setNiteliminar(String niteliminar) {
        this.niteliminar = niteliminar;
    }
    
    
    
    public Empresa getEmpresaeditar() {
        return empresaeditar;
    }

    public void setEmpresaeditar(Empresa empresaeditar) {
        this.empresaeditar = empresaeditar;
    }

    
    
    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }
    
    
    
    
    public List<Empresa> getListadoempresas() {
        empresajpa=new EmpresaJpaController();
        listadoempresas=empresajpa.findEmpresaEntities();
        return listadoempresas;
    }

    public void setListadoempresas(List<Empresa> listadoempresas) {
        this.listadoempresas = listadoempresas;
    }
    
    //REGISTRA UNA EMPRESA POR MEDIO DEL FORM DE REGISTRO DE EMPRESAS
    public void registrarEmpresa(ActionEvent e){
    
        empresa=new Empresa();
        empresajpa = new EmpresaJpaController();
        msg= new Mensajes();
        correo=new Correo();
        
        componente=e.getComponent().findComponent("regnitempresa");
        valor=((EditableValueHolder)componente).getValue();
        
        if(buscarNitrepetido(e,String.valueOf(valor))==false)
        {    
                empresa.setNit(String.valueOf(valor));

                componente=e.getComponent().findComponent("regnombreempresa");
                valor=((EditableValueHolder)componente).getValue();
                empresa.setNombre(String.valueOf(valor));

                componente=e.getComponent().findComponent("regreplegalempresa");
                valor=((EditableValueHolder)componente).getValue();
                empresa.setRepresentantelegal(String.valueOf(valor));

                componente=e.getComponent().findComponent("regpasswordempresa");
                valor=((EditableValueHolder)componente).getValue();
                empresa.setPassword(String.valueOf(valor));

                componente=e.getComponent().findComponent("regdeptoempresa");
                valor=((EditableValueHolder)componente).getValue();
                empresa.setDepto(String.valueOf(valor));

                componente=e.getComponent().findComponent("regactecoempresa");
                valor=((EditableValueHolder)componente).getValue();
                empresa.setActividadeconomica(String.valueOf(valor));

                componente=e.getComponent().findComponent("regdireccionempresa");
                valor=((EditableValueHolder)componente).getValue();
                empresa.setDireccion(String.valueOf(valor));

                componente=e.getComponent().findComponent("regtelefonoempresa");
                valor=((EditableValueHolder)componente).getValue();
                empresa.setTelefono(String.valueOf(valor));

                componente=e.getComponent().findComponent("regcelularempresa");
                valor=((EditableValueHolder)componente).getValue();
                empresa.setCelular(String.valueOf(valor));

                componente=e.getComponent().findComponent("regemailempresa");
                valor=((EditableValueHolder)componente).getValue();
                empresa.setEmail(String.valueOf(valor));

                empresa.setEstadousuario("Inhabilitado");
                empresa.setFecharegistro(new Date());
                empresa.setPagweb("");
                
                //CREANDO DIRECTORIOS PARA LA EMPRESA CREADA EMPRESA
                File directorioempresa = new File(getDestination()+empresa.getNombre());
                File directoriologoempresa = new File(getDestination()+empresa.getNombre()+"/logo");
                File directoriofotosadicionalesempresa = new File(getDestination()+empresa.getNombre()+"/fotosadicionales");
                File directorioproductosempresa = new File(getDestination()+empresa.getNombre()+"/productos");
                File directorioeventosempresa = new File(getDestination()+empresa.getNombre()+"/eventos");
                
                
                if(directorioempresa.mkdir() && directoriologoempresa.mkdir() && directoriofotosadicionalesempresa.mkdir() && directorioproductosempresa.mkdir() && directorioeventosempresa.mkdir())
                {  msg.info("Se ha creado unos directorio para el almacenamiento de archivos de su empresa.");
                
                }
                else
                {   msg.warning("no se ha podido crear el directorio");
                
                }
                
                try {
                    empresajpa.create(empresa);
                    correo.enviarEmailBienvenidaEmpresas(e);
                    msg.info("Correcto.. la cuenta ha sido creada satisfactoriamente por favor revise su correo...");
                } catch (PreexistingEntityException ex) {
                    Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
                } catch (Exception ex) {
                    Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
                }
        
        }else
        { msg.warning("Error el nit introducido ya existe intente de nuevo.."); }
    }
    
    
    
     //BUSCA Y VALIDA UN NIT REPETIDO DENTRO DE LA BASE DE DATOS
      public boolean buscarNitrepetido(ActionEvent e, String ccbus)
    {
       
          EntityManager em;
          Query query;
          
          em=EMF.get().createEntityManager();
          
          
          query = em.createQuery("SELECT empresa FROM Empresa empresa WHERE empresa.nit =?1")
                  .setParameter(1,ccbus);
          listadoempresas= query.getResultList();   
          
          if(listadoempresas.size()>0)
          {               nitrepetido=true; }
          else
          {nitrepetido=false; }
          
          em.close();
     
          return nitrepetido;
    }
    
      //ELIMINA EMPRESA COMPLETAMENTE SOLO POR EL ADMINISTRADOR
      public void eliminarEmpresa(ActionEvent e){
         
      //  componente=e.getComponent().findComponent("nitaeliminar");
      //  valor=((EditableValueHolder)componente).getValue();
         
        empresajpa=new EmpresaJpaController();
        
        try {
            empresajpa.destroy(niteliminar);
            
            
            // empresa=obtenerSessionEmpresa();
             //File fileelim = new File("/home/chokurey/NetBeansProjects/portal web/web/upload/"+empresa.getNombre());
             //fileelim.delete();  
            
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
         listadoempresas=getListadoempresas();
      }
  
      
      //edita la configuracion basica de cantidad de eventos,clasificados,promociones que puede publicar cada empresa.
     public void editarConfiguracionEmpresa(ActionEvent e){
         
       // componente=e.getComponent().findComponent("nitedit");
      //  valor=((EditableValueHolder)componente).getValue();
        msg=new Mensajes(); 
         
        empresajpa=new EmpresaJpaController();
        empresa=empresajpa.findEmpresa(niteditar);
        
        componente=e.getComponent().findComponent("nombreedit");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setNombre(String.valueOf(valor));
        
        componente=e.getComponent().findComponent("estadousuarioempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setEstadousuario(String.valueOf(valor));
        
        componente=e.getComponent().findComponent("canteventosempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setCanteventos(Integer.parseInt(String.valueOf(valor)));
        
        componente=e.getComponent().findComponent("cantpromocionesempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setCantpromociones(Integer.parseInt(String.valueOf(valor)));
        
        componente=e.getComponent().findComponent("cantclasificadosesempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setCantclasificados(Integer.parseInt(String.valueOf(valor)));
        
         componente=e.getComponent().findComponent("cantproductosempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setCantproductos(Integer.parseInt(String.valueOf(valor)));
        
         componente=e.getComponent().findComponent("cantserviciosempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setCantservicios(Integer.parseInt(String.valueOf(valor)));
        
        componente=e.getComponent().findComponent("cantfotosplan");
        valor=((EditableValueHolder)componente).getValue();
        
        //edica catidad de fotos del plan para validar fotos adicionales del mismo
        empresa.setCantfotosplancompl(Integer.parseInt(String.valueOf(valor)));
        
        
        componente=e.getComponent().findComponent("planservicioempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setPlan(String.valueOf(valor));
        
        componente=e.getComponent().findComponent("fechainicioservicioempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setFechainicioservicio((Date)valor);
        
        componente=e.getComponent().findComponent("fechafinservicioempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setFechafinservicio((Date)valor);
        
        try {
            if(empresa.getFechafinservicio().before(fechainicioservicio) )
            {  msg.warning("La fecha de inicio debe ser menor por favor verifique la información"); }
            else{
               empresajpa.edit(empresa);
               msg.info("Empresa editada correctamente..");
            }
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
     
         listadoempresas=getListadoempresas();
      }
     
     
     //edita toda la informacion del perfil de usuario de la empresa
     public void editarEmpresa(ActionEvent e){
         
        componente=e.getComponent().findComponent("regnitempresa");
        valor=((EditableValueHolder)componente).getValue();
        msg=new Mensajes(); 
        
        niteditar=String.valueOf(valor);
        
        empresajpa=new EmpresaJpaController();
        empresa=empresajpa.findEmpresa(niteditar);
        
         componente=e.getComponent().findComponent("regnombreempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setNombre(String.valueOf(valor));
        
        componente=e.getComponent().findComponent("regnitempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setNit(String.valueOf(valor));
        
        componente=e.getComponent().findComponent("regreplegalempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setRepresentantelegal(String.valueOf(valor));
        
        componente=e.getComponent().findComponent("regpasswordempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setPassword(String.valueOf(valor));
        
        componente=e.getComponent().findComponent("regdeptoempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setDepto(String.valueOf(valor));
        
         componente=e.getComponent().findComponent("regactecoempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setActividadeconomica(String.valueOf(valor));
        
         componente=e.getComponent().findComponent("regdireccionempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setDireccion(String.valueOf(valor));
        
        
         componente=e.getComponent().findComponent("regtelefonoempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setTelefono(String.valueOf(valor));
        
         componente=e.getComponent().findComponent("regcelularempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setCelular(String.valueOf(valor));
        
        componente=e.getComponent().findComponent("regemailempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setEmail(String.valueOf(valor));
    
        
        componente=e.getComponent().findComponent("regepagwebempresa");
        valor=((EditableValueHolder)componente).getValue();
        empresa.setPagweb(String.valueOf(valor));
        
        try {
            
               empresajpa.edit(empresa);
               msg.info("Empresa editada correctamente..");
            
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
     
         listadoempresas=getListadoempresas();
      }
     
     //GUARDA EL LOGO DE LA EMPRESA ACTIVA EN LA TABLA EMPRESAS CAMPO LOGO
     public void guardarLogoEmpresa(ActionEvent e){
     
         msg=new Mensajes(); 
         empresajpa=new  EmpresaJpaController();
         
         componente=e.getComponent().findComponent("idlogoedit");
         valor=((EditableValueHolder)componente).getValue();
         
         empresajpa=new EmpresaJpaController();
         empresa=empresajpa.findEmpresa(String.valueOf(valor));
        
          
        try {
              empresa=obtenerSessionEmpresa();
              File fileelim = new File(getDestination()+empresa.getNombre()+"/logo/"+empresa.getLogo());
              fileelim.delete();
              //SUBE LOGOA LA CARPETA LOGO CASO OP=1
              upload(e,1);  
              empresa.setLogo(getUrllogo());  
              empresajpa.edit(empresa);
              sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
              sessionm.put("sessionlogoempresa", empresa.getLogo());
              msg.info("El logo se ha editado correctamente");
            
            
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
         
        
        
        
         
     
     }
     
    //METODO QUE GUARDA FOTO ADICIONAL TABLA FOTOS - PARA EL PLAN COMPLEMENTARIO TABLA FOTOS
      public void guardarFotoAdicionalEmpresa(ActionEvent e){
     
         Fotos foto;
         FotosJpaController fotojpa;
         
         msg=new Mensajes(); 
         empresajpa=new  EmpresaJpaController();
         
         fotojpa=new FotosJpaController();
         
         //componente=e.getComponent().findComponent("fileuploadlogo");
         //valor=((EditableValueHolder)componente).getValue();
         
         //empresajpa=new EmpresaJpaController();
         //empresa=empresajpa.findEmpresa(String.valueOf(valor));
        
         if(verificarFotoAdicionalRepetida()==false && verificarCantFotosAdicionalesPlanCompl()== false)
            {
              foto = new Fotos();  
              upload(e,2);  
              foto.setFoto(getUrllogo());  
              empresa=obtenerSessionEmpresa();
              foto.setEmpresanit(empresa);
              fotojpa.create(foto);
              //sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
              //sessionm.put("sessionlogoempresa", empresa.getLogo());
              msg.info("La foto adicional se ha Agregado correctamente");
            }else
            { 
                msg.warning("Intente con otro nombre de imagen y tenga en cuenta el maximo de imagenes a ingresar segun su plan");
            }
            
     }
     
   //VERIFICA QUE EL LOGO DE UNA NO EXISTA EN LA BASE DE DATOS TABLA EMPRESA CAMPO LOGO
    public boolean verificarLogoRepetido(){
          
          boolean repetido;
          EntityManager em;
          Query query;
          em=EMF.get().createEntityManager();
          
          // VERIFICAMOS QUE EL LOGO NO EXISTA EN LA TABLA EMPRESAS CAMPO LOGO
          query = em.createQuery("SELECT empresa FROM Empresa empresa WHERE empresa.logo =?1 ")
                  .setParameter(1,getFile().getFileName());
          listadoempresas= query.getResultList();   
          
          
          
          if(listadoempresas.size()>0)
          {  repetido=true; }
          else
          { repetido=false; }
          em.close();
          return repetido;
    }
    
    
    //VERIFICA QUE LA FOTO NO EXISTA EN LA BASE DE DATOS CON UN NOMBRE REPETIDO - TABLA FOTOS
    public boolean verificarFotoAdicionalRepetida(){
          boolean repetido;
          EntityManager em;
          Query query;
          em=EMF.get().createEntityManager();
          empresa=obtenerSessionEmpresa();
          query = em.createQuery("SELECT foto FROM Fotos foto WHERE foto.foto =?1 and foto.empresanit =?2")
                  .setParameter(1,getFile().getFileName())
                  .setParameter(2,empresa);
          listadofotos= query.getResultList();   
          
          if(listadofotos.size()>0 && verificarLogoRepetido() == false)
          { repetido=true; }
          else
          { repetido=false; }
          
          em.close();
          return repetido;
    }
     
   //COMPRUEBA QUE LA EMPRESA DE PLAN COMPLEMENTARIO O EMPRESARIALTENGA COMO MAXIMO DOS IMAGENES ADICIONALES 
    public boolean verificarCantFotosAdicionalesPlanCompl(){
    
          boolean masdeunafoto;
          EntityManager em;
          Query query;
          em=EMF.get().createEntityManager();
          
          empresa=obtenerSessionEmpresa();
          
          query = em.createQuery("SELECT foto FROM Fotos foto WHERE foto.empresanit =?1 ")
                  .setParameter(1,empresa);
          listadofotos= query.getResultList(); 
          
          //que la catidad de fotos sea menor que la configurada por el administrador
          if(listadofotos.size() < empresa.getCantfotosplancompl())
          {  masdeunafoto=false; }
          else
          { masdeunafoto=true; }
          
      return masdeunafoto;
    }
    
    
   //GUARDA TEXO RELACIONADO CON LA INFORMACION BASICA DE LA EMPRESA 
    public void guardarInformacionEmpresa(ActionEvent e){
    
         msg=new Mensajes();
         componente=e.getComponent().findComponent("idlogoedit");
         valor=((EditableValueHolder)componente).getValue();
         
         empresajpa=new EmpresaJpaController();
         empresa=empresajpa.findEmpresa(String.valueOf(valor));
         
         componente=e.getComponent().findComponent("infoempresaedit");
         valor=((EditableValueHolder)componente).getValue();
         
         empresa.setInfoempresa(String.valueOf(valor));
         
        try {
            empresajpa.edit(empresa);
            msg.info("Edición realizada satisfactoriamente..");
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    } 
     
     
     public void TransferFile(String fileName, InputStream in,int op)
    {
         
       switch(op)
       { 
        //CASO 1 PARA SUBIR LOGO A LA CARPETA LOGO DE LA EMPRESA   
        case 1:
                try{
                    empresa=obtenerSessionEmpresa(); 
                    OutputStream out = new FileOutputStream(new File(destination+empresa.getNombre()+"/logo/"+fileName));
                    int reader = 0;
                    byte bytes[] = new byte[(int)getFile().getSize()];
                    while((reader=in.read(bytes)) != -1)
                    {
                        out.write(bytes, 0, reader);
                    }
                    in.close();
                    out.flush();
                    out.close();
                }catch(IOException e)
                {
                    System.out.print(e.getMessage());
                }
         break;
         // CASO 2 PARA GUARDAR FOTOS ADICIONALES EN CARPETA FOTOSADICIONALES  
         case 2:   
               try{
                    empresa=obtenerSessionEmpresa(); 
                    OutputStream out = new FileOutputStream(new File(destination+empresa.getNombre()+"/fotosadicionales/"+fileName));
                    int reader = 0;
                    byte bytes[] = new byte[(int)getFile().getSize()];
                    while((reader=in.read(bytes)) != -1)
                    {
                        out.write(bytes, 0, reader);
                    }
                    in.close();
                    out.flush();
                    out.close();
                }catch(IOException e)
                {
                    System.out.print(e.getMessage());
                }
         break;
               // CASO 3 PARA GUARDAR PRODUCTOS  EN CARPETA PRODUCTOS  
         case 3:   
               try{
                    empresa=obtenerSessionEmpresa(); 
                    OutputStream out = new FileOutputStream(new File(destination+empresa.getNombre()+"/productos/"+fileName));
                    int reader = 0;
                    byte bytes[] = new byte[(int)getFile().getSize()];
                    while((reader=in.read(bytes)) != -1)
                    {
                        out.write(bytes, 0, reader);
                    }
                    in.close();
                    out.flush();
                    out.close();
                }catch(IOException e)
                {
                    System.out.print(e.getMessage());
                }
         break;
               // CASO 4 PARA GUARDAR EVNETOS  EN CARPETA EVENTOS
         case 4:   
               try{
                    empresa=obtenerSessionEmpresa(); 
                    OutputStream out = new FileOutputStream(new File(destination+empresa.getNombre()+"/eventos/"+fileName));
                    int reader = 0;
                    byte bytes[] = new byte[(int)getFile().getSize()];
                    while((reader=in.read(bytes)) != -1)
                    {
                        out.write(bytes, 0, reader);
                    }
                    in.close();
                    out.flush();
                    out.close();
                }catch(IOException e)
                {
                    System.out.print(e.getMessage());
                }
         break;    
       }
    }
    
    public void upload(ActionEvent e,int op)
    {
       String extValidate;
       
       componente = e.getComponent().findComponent("fileuploadlogo");
       valor=((EditableValueHolder)componente).getValue();
       
       if(valor != null)
       {
         String ext= getFile().getFileName();
         if(ext !=null)
         { extValidate=ext.substring(ext.indexOf(".")+1); }
         else
         { extValidate=null; }
         
         if(extValidate.equals("jpeg") || extValidate.equals("jpg"))
         { 
           try{
                TransferFile(getFile().getFileName(), getFile().getInputstream(),op);
              } catch(IOException ex){
                Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
                FacesContext context =FacesContext.getCurrentInstance();
                context.addMessage(null, new FacesMessage("Error"," Al subir el archivo"));
              } 
                FacesContext context =FacesContext.getCurrentInstance();
                setUrllogo(getFile().getFileName());
         }else{
              FacesContext context =FacesContext.getCurrentInstance();
              context.addMessage(null, new FacesMessage("Error de Extension"," la extension debe ser jpg"));
           }
       
       }else{
               FacesContext context =FacesContext.getCurrentInstance();
              context.addMessage(null, new FacesMessage("Error "," Seleccione un archivo"));
       }
    
    }
    
       public Empresa obtenerSessionEmpresa(){
   
          sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
          empresa = (Empresa) sessionm.get("sessionempresa");
          
       return empresa;   
   }
       
   
  
  //METODO DE OBTIENE EL LISTADO DE FOTOS ADICIONALES PLAN COMPLEMENTARIO O EMPRESARIAL POR CADA EMPRESA
  public List obtenerlistarfotosadicionalesempresaplancomplementario()
  {
          EntityManager em;
          Query query;
          em=EMF.get().createEntityManager();
          
          empresa=obtenerSessionEmpresa();
          
          query = em.createQuery("SELECT foto FROM Fotos foto WHERE foto.empresanit =?1 ")
                  .setParameter(1,empresa);
          listadofotos= query.getResultList(); 
   
   return listadofotos;
  }
  
  //METODO ENCARGADO DE ELIMINAR UNA FOTOADICIONAR DEL EMPRESARIO DEL PLAN COMPLEMENTARIO O EMPRESARIAL
  public void eliminarfotoadicionalplancomplementario(ActionEvent e){
  
      int fotoelim;
        
     componente=e.getComponent().findComponent("fotoadicionalaeliminar");
     valor=((EditableValueHolder)componente).getValue();
     fotoelim=Integer.valueOf(String.valueOf(valor));
     
      EntityManager em;
      Query query;
      em=EMF.get().createEntityManager();
          
      empresa=obtenerSessionEmpresa();
          
      query = em.createQuery("SELECT foto FROM Fotos foto WHERE foto.idfotos =?1 ")
                  .setParameter(1,fotoelim);
     
      foto=(Fotos) query.getSingleResult();
      fotojpa=new FotosJpaController();
      
      //ELIMINA LA FOTO SELECCIONADA DE LA TABLA
      File fileelim = new File(getDestination()+empresa.getNombre()+"/fotosadicionales/"+foto.getFoto());
      fileelim.delete();
      
    try {
            fotojpa.destroy(foto.getIdfotos());
        } catch (NonexistentEntityException ex) 
        {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
       
  
  }
  
  //METODO ENCARGADO DE EDITAR FOTOS ADICIONALES EN EL PLAN COMPLEMENTARIO DE LAS EMPRESAS CANTO FOTOS MAX 2
  public void editarFotoAdicionalPlanComplementario(ActionEvent e){
      
      
      int fotoedit;
      msg= new Mensajes();
      
      componente=e.getComponent().findComponent("fotoaddeditplancompl");
      valor=((EditableValueHolder)componente).getValue(); 
      fotoedit=Integer.parseInt(String.valueOf(valor));
      
      
      fotojpa=new FotosJpaController();
      foto=fotojpa.findFotos(fotoedit);
     
         try {
            //VERIFICA LA IMAGEN NUEVA PARA EDITAR Y CAMBIAR EN LA TABLA FOTOS DE LA EMPRESA ACTIVA 
            //TABLA FOTOS PLAN COMPLEMENTARIO Y EMPRESARIAL
            if(verificarFotoAdicionalRepetida()== false)
            { 
             //ELIMINA LA FOTO ANTERIOR Y EDITA Y ACTUALIZA LA NUEVA
             upload(e,2);
             File fileelim = new File(getDestination()+empresa.getNombre()+"/fotosadicionales/"+foto.getFoto());
             fileelim.delete();   
             foto.setFoto(getUrllogo());   
             fotojpa.edit(foto);
             listadofotos=obtenerlistarfotosadicionalesempresaplancomplementario();
             msg.info("Imagen adicional editada correctamente");
            }else
            {
              msg.warning("Intente con otro nombre de imagen y tenga en cuenta el maximo de imagenes a ingresar segun su plan");
            }
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
  
  }
  
  
  //OPERACIONES PARA LOS PRODUCTOS
  //METODO ENCARGADO PARA GUARDAR PRODUCTOS DE LA EMPRESA
   public void guardarProductoEmpresa(ActionEvent e){
        
          msg =new Mensajes();
          producto = new  Productos();
          productosjpa = new ProductosJpaController();
          
         
          
            if(verificarProductoAdicionalRepetido()==false && verificarCantImagenesProductosAdicionalesPlan()== false)
            {
                
                componente = e.getComponent().findComponent("nombreproducto");
                valor=((EditableValueHolder)componente).getValue();
                producto.setNombre(String.valueOf(valor));

                componente = e.getComponent().findComponent("descripcionproducto");
                valor=((EditableValueHolder)componente).getValue();
                producto.setDescripcion(String.valueOf(valor));

                componente = e.getComponent().findComponent("valorproducto");
                valor=((EditableValueHolder)componente).getValue();
                producto.setValor(String.valueOf(valor));

                upload(e,3);
                producto.setImagen(getUrllogo());

                empresa=obtenerSessionEmpresa();
                producto.setEmpresanit(empresa);  
                
              productosjpa.create(producto);
              msg.info("Producto almacenado correctamente.");
            }
            else{
              msg.warning("Intente con otro nombre de imagen y tenga en cuenta el maximo de imagenes a ingresar segun su plan");
            }
         
          
          
          
    
    
    
    }
    //METODOD ANCARGADO PARA EDITAR UN PRODUCTO
    public void editarProductoEmpresa(ActionEvent e){
        
        
      int fotoproductedit;
      msg= new Mensajes();
      
      componente=e.getComponent().findComponent("idproductoedit");
      valor=((EditableValueHolder)componente).getValue(); 
      fotoproductedit=Integer.parseInt(String.valueOf(valor));
      
      
      productosjpa=new ProductosJpaController();
      producto=productosjpa.findProductos(fotoproductedit);
     
         try {
            //VERIFICA LA IMAGEN NUEVA PARA EDITAR Y CAMBIAR EN LA TABLA FOTOS DE LA EMPRESA ACTIVA 
            //TABLA FOTOS PLAN COMPLEMENTARIO Y EMPRESARIAL
            if(verificarProductoAdicionalRepetido()== false)
            { 
             //ELIMINA LA FOTO ANTERIOR Y EDITA Y ACTUALIZA LA NUEVA
             empresa=obtenerSessionEmpresa();   
             upload(e,3);
             File fileelim = new File(getDestination()+empresa.getNombre()+"/productos/"+producto.getImagen());
             fileelim.delete();   
             producto.setImagen(getUrllogo());   
             productosjpa.edit(producto);
             listadoproductos=getListadoproductos();
             msg.info("Producto editado correctamente");
            }else
            {
              msg.warning("Intente con otro nombre de imagen y tenga en cuenta el maximo de imagenes a ingresar segun su plan");
            }
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
        
    }
    
    //METODOD ANCARGADO PARA ELIMINAR UN PRODUCTO
    public void eliminarProductoEmpresa(ActionEvent e){
        
        int prodelim;
        msg= new Mensajes();
        
        componente=e.getComponent().findComponent("idproductoelim");
        valor=((EditableValueHolder)componente).getValue(); 
        prodelim=Integer.parseInt(String.valueOf(valor));
       
        productosjpa=new ProductosJpaController();
        try {
             producto=productosjpa.findProductos(prodelim);
             productosjpa.destroy(prodelim);
              msg.info("Producto Eliminado correctamente");
             //ELIMINA LA FOTO SELECCIONADA DE LA TABLA
             empresa=obtenerSessionEmpresa();
             File fileelim = new File(getDestination()+empresa.getNombre()+"/productos/"+producto.getImagen());
             fileelim.delete();
             listadoproductos=getListadoproductos();
            
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
  
   //VERIFICA QUE LA IMAGEN DEL PRODUCTO NO EXISTA EN LA BASE DE DATOS CON UN NOMBRE REPETIDO - TABLA PRODUCTOS
    public boolean verificarProductoAdicionalRepetido(){
          
        boolean repetido;
          EntityManager em;
          Query query;
          em=EMF.get().createEntityManager();
          empresa=obtenerSessionEmpresa();
          
          query = em.createQuery("SELECT producto FROM Productos producto WHERE producto.imagen =?1 and producto.empresanit =?2")
                  .setParameter(1,getFile().getFileName())
                  .setParameter(2,empresa);
          listadoproductos= query.getResultList();   
          
          if(listadoproductos.size()>0)
               repetido=true;
          else
               repetido=false;
          
          em.close();
          return repetido;
    }
    
    
    //COMPRUEBA QUE LA EMPRESA DE PLAN TENGA COMO MAXIMO LOS PRODUCTOS CONFIGURADOS POR EL ADMINISTRADOR 
    public boolean verificarCantImagenesProductosAdicionalesPlan(){
    
          boolean masdeunafoto;
          EntityManager em;
          Query query;
          em=EMF.get().createEntityManager();
          
          empresa=obtenerSessionEmpresa();
          
          query = em.createQuery("SELECT producto FROM Productos producto WHERE producto.empresanit =?1 ")
                  .setParameter(1,empresa);
          listadoproductos= query.getResultList(); 
          
          //que la catidad de fotos sea menor que la configurada por el administrador
          if(listadoproductos.size() < empresa.getCantfotosplancompl())
          {  masdeunafoto=false; }
          else
          { masdeunafoto=true; }
          
      return masdeunafoto;
    }
    
 
    
     //METODO ENCARGADO DE GUARDAR LOS SERVICIO DE LA EMPRESA SEGUN CANTIDAD CONFIGURADA DESDE EL ADMINISTRADOR
    public void guardarServiciosEmpresa(ActionEvent e){
        
        msg= new Mensajes();
        servicio= new Servicios();
        serviciosjpa= new ServiciosJpaController();
        
        servicio.setIdServicios(serviciosjpa.getServiciosCount()+1);
        
        componente=e.getComponent().findComponent("nombreservicio");
        valor=((EditableValueHolder)componente).getValue();
        servicio.setNombre(String.valueOf(valor));
        
        componente=e.getComponent().findComponent("descripcionservicio");
        valor=((EditableValueHolder)componente).getValue();
        servicio.setDescripcion(String.valueOf(valor));
        
        empresa=obtenerSessionEmpresa();
        servicio.setEmpresanit(empresa);
       
        try {
            if(serviciosjpa.getServiciosCount()<empresa.getCantservicios())
            {    
             serviciosjpa.create(servicio);
             listadoservicios=getListadoservicios();
             msg.info("Servicio adicionado correctamente");
            }else
                msg.warning("La cantidad de servicios a ingresar no puede superar la cantidad maxima dentro de su plan adquirido.");
        } catch (PreexistingEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    
    }
    
    //ELIMINA SERVICIO DE LA EMPRESA
    public void eliminarServicioEmpresa(ActionEvent e)
    {
            int idelim;
            msg= new Mensajes();
            
            componente=e.getComponent().findComponent("ideditservicioemp");
            valor=((EditableValueHolder)componente).getValue(); 
            idelim=Integer.parseInt(String.valueOf(valor));
            
            
            serviciosjpa= new ServiciosJpaController();
        try {
            serviciosjpa.destroy(idelim);
             msg.info("Servicio eliminado correctamente");
             listadoservicios=getListadoservicios();
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
            
            
           
       
      
    }
    //EDITA SERVICIO DE LA EMPRESA
    public void editarServicioEmpresa(ActionEvent e){
        
         int selim;
         msg= new Mensajes();
         serviciosjpa= new ServiciosJpaController();
         
         componente=e.getComponent().findComponent("ideditservicioemp");
         valor=((EditableValueHolder)componente).getValue();
         selim=Integer.parseInt(String.valueOf(valor));
         
         servicio=serviciosjpa.findServicios(selim);
         
         componente=e.getComponent().findComponent("nombreservicio");
         valor=((EditableValueHolder)componente).getValue();
         servicio.setNombre(String.valueOf(valor));
         
         componente=e.getComponent().findComponent("descripcionservicio");
         valor=((EditableValueHolder)componente).getValue();
         servicio.setDescripcion(String.valueOf(valor));
         
         empresa=obtenerSessionEmpresa();
         servicio.setEmpresanit(empresa);
         
        try {
            serviciosjpa.edit(servicio);
            listadoservicios=getListadoservicios();
            msg.info("Servicio editado correctamente");
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
         
    
    }
    //METODO PARA GUARDAR EVENTOS DE LA EMPRESA
    public void guardarEventoEmpresa(ActionEvent e){
        
      eventosjpa = new EventosJpaController(); 
      evento = new Eventos();
      msg=new Mensajes();
      
    
      
        try {
            
            if(verificarImagenEventoRepetido() == false && verificarCantImagenesEventosAdicionalesPlan() == false)
            {  
                
                evento.setIdEventos(eventosjpa.getEventosCount()+1);
                
                componente=e.getComponent().findComponent("nombreevento");
                valor=((EditableValueHolder)componente).getValue();
                evento.setNombre(String.valueOf(valor));

                componente=e.getComponent().findComponent("descripcionevento");
                valor=((EditableValueHolder)componente).getValue();
                evento.setDescripcion(String.valueOf(valor));

                componente=e.getComponent().findComponent("lugarevento");
                valor=((EditableValueHolder)componente).getValue();
                evento.setLugar(String.valueOf(valor));

                componente=e.getComponent().findComponent("faechayhorainicio");
                valor=((EditableValueHolder)componente).getValue();
                evento.setFechainicio((Date)valor);

                componente=e.getComponent().findComponent("faechayhorafin");
                valor=((EditableValueHolder)componente).getValue();
                evento.setFechafin((Date)valor);

                componente=e.getComponent().findComponent("emailcontactoevento");
                valor=((EditableValueHolder)componente).getValue();
                evento.setEmailcontacto(String.valueOf(valor));
                
                evento.setServicioadicional("no");
                
                upload(e, 4);
                evento.setImagen(getUrllogo());

                empresa=obtenerSessionEmpresa();
                evento.setEmpresanit(empresa);  
                
                eventosjpa.create(evento);
                msg.info("Evento creado correctamente");
            }
        } catch (PreexistingEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
      
    
    }
    
     //METODO PARA ELIMINAR EVENTOS DE LA EMPRESA
    public void eliminarEventoEmpresa(ActionEvent e)
    {
      Mensajes msg;
      eventosjpa= new EventosJpaController();
      msg= new Mensajes();
        
      componente = e.getComponent().findComponent("idelimeventoemp");
      valor=((EditableValueHolder)componente).getValue();
      
      evento= eventosjpa.findEventos(Integer.parseInt(String.valueOf(valor)));
     
      try {
            eventosjpa.destroy(Integer.parseInt(String.valueOf(valor)));
            empresa=obtenerSessionEmpresa();
            File fileelim = new File(getDestination()+empresa.getNombre()+"/eventos/"+evento.getImagen());
            fileelim.delete();
            listadoeventos=getListadoeventos(); 
            msg.info("Evento eliminado correctamente");
            
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    }
    
     //METODO PARA EDITAR EVENTOS DE LA EMPRESA
    public void editarEventoEmpresa(ActionEvent e)
    {
        
       Mensajes msg;
       msg= new Mensajes();
       eventosjpa= new EventosJpaController();
       
       componente=e.getComponent().findComponent("idediteventoemp");
       valor=((EditableValueHolder)componente).getValue();
       
       evento=eventosjpa.findEventos(Integer.parseInt(String.valueOf(valor)));
       
       if(verificarImagenEventoRepetido() == false )
        {    
      
                componente = e.getComponent().findComponent("editnombreevento");
                valor=((EditableValueHolder)componente).getValue();
                evento.setNombre(String.valueOf(valor));

                componente = e.getComponent().findComponent("editdescripcionevento");
                valor=((EditableValueHolder)componente).getValue();
                evento.setDescripcion(String.valueOf(valor));

                componente = e.getComponent().findComponent("editlugarevento");
                valor=((EditableValueHolder)componente).getValue();
                evento.setLugar(String.valueOf(valor));

                componente = e.getComponent().findComponent("editfaechayhorainicio");
                valor=((EditableValueHolder)componente).getValue();
                evento.setFechainicio((Date)valor);

                componente = e.getComponent().findComponent("editfaechayhorafin");
                valor=((EditableValueHolder)componente).getValue();
                evento.setFechafin((Date)valor);

                componente = e.getComponent().findComponent("editemailcontactoevento");
                valor=((EditableValueHolder)componente).getValue();
                evento.setEmailcontacto(String.valueOf(valor));
                
                empresa=obtenerSessionEmpresa();
                File fileelim = new File(getDestination()+empresa.getNombre()+"/eventos/"+evento.getImagen());
                fileelim.delete();
                upload(e, 4);
                evento.setImagen(getUrllogo());
            try {                
                eventosjpa.edit(evento);
                msg.info("Evento editado correctamente");
                
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(OperacionesEmpresa.class.getName()).log(Level.SEVERE, null, ex);
            }
                
                
       
        }
       
        
        
    }
    
     //VERIFICA QUE LA IMAGEN DEL EVENTO NO EXISTA EN LA BASE DE DATOS CON UN NOMBRE REPETIDO - TABLA EVENTOS
    public boolean verificarImagenEventoRepetido(){
          
        boolean repetido;
          EntityManager em;
          Query query;
          em=EMF.get().createEntityManager();
          empresa=obtenerSessionEmpresa();
          
          query = em.createQuery("SELECT evento FROM Eventos evento WHERE evento.imagen =?1 and evento.empresanit =?2")
                  .setParameter(1,getFile().getFileName())
                  .setParameter(2,empresa);
          listadoeventos= query.getResultList();   
          
          if(listadoeventos.size()>0) {
            repetido=true;
        }
          else {
            repetido=false;
        }
          
          em.close();
          return repetido;
    }
    
    
    //COMPRUEBA QUE LA EMPRESA DE PLAN TENGA COMO MAXIMO LOS EVENTOS CONFIGURADOS POR EL ADMINISTRADOR 
    public boolean verificarCantImagenesEventosAdicionalesPlan(){
    
          boolean maseventos;
          EntityManager em;
          Query query;
          em=EMF.get().createEntityManager();
          
          empresa=obtenerSessionEmpresa();
          
          query = em.createQuery("SELECT evento FROM Eventos evento WHERE evento.empresanit =?1 ")
                  .setParameter(1,empresa);
          listadoeventos= query.getResultList(); 
          
          //que la catidad de fotos sea menor que la configurada por el administrador
          if(listadoeventos.size() < empresa.getCanteventos())
          {  maseventos=false; }
          else
          { maseventos=true; }
          
          em.close();
      return maseventos;
    }
    
}
